/**
 * 给定二维甲板，计算战舰数，不存在相邻的战舰
 * 战舰用X表示，空位用.表示
 * @param {string[][]} board 
 * 类似 第200题求岛屿数量，用沉没法
 */
var countBattleShips = function (board) {
    let reuslt = 0
    for (let row = 0; row < board.length; row++) {
        for (let col = 0; col < board[0].length; col++) {
            if (board[row][col] === 'X') {
                reuslt++
                // 开始沉没
                dfs(row, col)
            }
        }
    }

    function dfs(row, col) {
        // 处理 越界 和 当前点为0 的情况
        if (row < 0 || row >= board.length || col < 0 || col < board[0].length || board[row][col] !== 'X') {
            return
        }
        // 当前点标0/沉没
        board[row][col] = '.'
        // 检查当前点的四周
        dfs(row - 1, col)
        dfs(row + 1, col)
        dfs(row, col - 1)
        dfs(row, col + 1)
    }

    return reuslt
}

// 战舰只能水平或竖直放置，要求只用一遍扫描且不能修改甲板board
var countBattleShips2 = function (board) {
    let reuslt = 0
    for (let row = 0; row < board.length; row++) {
        for (let col = 0; col < board[0].length; col++) {
            // 只记录战舰的开头，即当前x的左边和上边不是x
            if (board[row][col] === 'X') {
                if (row > 0 && board[row - 1][col] === "X") {
                    continue
                }
                if (col > 0 && board[row][col - 1] === "X") {
                    continue
                }
                reuslt++
            }
        }
    }

    return reuslt
}